// 引入express框架
const express = require('express');
// 路径处理模块
const path = require('path');
// bodyparser 用来解析post的请求取代了 原生的 req.on 的方式 但是只能取到ajax 和表单的数据 ，取不到上传的文件类型。
const bodyParser = require('body-parser');
// 模块可用于与文件系统进行交互（以类似于标准 POSIX 函数的方式）
const fs = require('fs');
// 创建web服务器
const app = express();

app.use(bodyParser.json());

// 拦截所有的请求为他们加上响应头!
// next 控制权函数
app.use(function (req, res, next) {
	// 允许哪些客户端访问我！
	// 第一个参数就是响应头的属性名称
	// 第二个参数就是响应头的属性名称对应的值!
	// * 代表允许所有的客户端访问我!
	res.header('Access-Control-Allow-Origin', '*')
	// 允许客户端使用哪些请求方法访问我!
	res.header('Access-Control-Allow-Methods', 'get, post')
	next();
})
  
// 静态资源访问服务功能
app.use(express.static(path.join(__dirname, 'public')));

app.post('/first', (req, res) => {
	res.send('hello Ajax');
}) 

app.get('/responseData', (req, res) => {
	res.send({"name": "吕航"});
})

// 对应03html文件
app.get('/get', (req, res) => {
	res.send(req.query);
});

// 对应04.html文件
app.post('/post', (req, res) => {
	res.send(req.body);
});

// 对应05.html文件
app.post('/json', (req, res) => {
	res.send(req.body);
});

// 对应06.html文件
app.get('/readystate', (req, res) => {
	res.send('lvhang')
})

// 对应07html文件
app.get('/error', (req, res) => {
	// console.log(abc);
	res.status(400).send('not ok');
});

// 对应08.html文件
app.get('/cache', (req, res) => {
	fs.readFile('./text.txt', (err, result) => {
		res.send(result);
	})
})

// 在二号服务器的app.js中写一个测试路由!让第一个同源来访问！
app.get('/test', (req, res) => {
	// 要在这儿返回一个函数调用的代码！
	const result = 'fn({name: "lvhang"}, {test: "如果你能看到这条消息，说明你已经解决了同源的问题!你用的或许是jsonph or CROS但是，这已经不重要了！"})';
	res.send(result)
})

app.get('/better', (req, res) => {
	// 接收客户端传递过来的函数名称
	// const fnName = req.query.callback;
	// 将函数名称对应的函数调用代码返回给客户端！
	// const data = JSON.stringify([{name: "lvhang"},{test: "如果你能看到这条消息，说明你已经解决了同源的问题!你用的或许是jsonph or CROS但是，这已经不重要了！"}]);
	// const result = fnName + '(' + data + ')';
	// setTimeout( () => {
	// }, 1000)
	// res.send(result)

// 在jsonp的内部就是干的上面的事情！
	res.jsonp({name: 'lvchengxin', age: 20})
})

app.get('/cross', (req, res) => {

	// 允许哪些客户端访问我！
	// 第一个参数就是响应头的属性名称
	// 第二个参数就是响应头的属性名称对应的值!
	// * 代表允许所有的客户端访问我!
	// res.header('Access-Control-Allow-Origin', '*')
	// 允许客户端使用哪些请求方法访问我!
	// res.header('Access-Control-Allow-Methods', 'get, post')

	res.send('您成功的使用CROS跨域资源共享的方法解决了同源的问题!')

})
// 监听端口服务器
app.listen(3001);  
// 控制台提示输出
console.log('the background server is running: port: 3001');